Protectia ======= Protectia este asigurata de un ton pur, imediat dupa incarcarea ecranului. Pe casete, uneori se gasesc si acolo unde softurile nu erau protejate (de exemplu, nota autor, sau unele autorul nu le-a protejat pur si simplu). Exista o rutina assembler, care are grija sa citeasca acest ton imediat dupa incarcarea ecranului. Pentru Mat1, Mat2, Mat4 stiu ca tonul este sintetizat la 688Hz, adica lungimea unui puls este 2664. Pentru Mat3 tonul este sintetizat la 740Hz, si folosind regula de 3 simpla rezulta ca lungimea pulsului este de 2476 (sunt INVERS proportionale!). Numarul de pulsuri a fost diminuat fata de banda, nefiind necesara lungimea de 2180 pulsuri. La diferite softuri tonul are diverse frecvente, dar lungimea lui este aceeasi: 2840 (0B18 in hex). Practic, deschidem tzx-ul cu un editor hex (de exemplu, notepad++ cu plugin activat) si cautam 180B (octetii dublii sunt memorati invers in fisier), iar octetul dubul de dinaintea lui ne da lungimea unui puls (de exemplu, 9207 => 0792(hex) = 1938). La unele softuri, numarul de octeti este 280B (adica 2856). Modalitatea de conversie: =================== 1. Se elimina tonul pur din fisierul wav 2. Se elimina partile nenecesare din fisier (bucati de fasait la inceput si la sfarsit). 3. Se ruleaza maketzx si se obtine un fisier tzx. De cele mai multe ori apar erori; se salveaza fisierul obtinut (din care pastram cu tapir partile bine convertite), se sterg partile bine convertite din wav si se converteste din nou. De fiecare data, este necesara micsorarea volumului (care trebuie sa fie extrem de mic de cele mai multe ori). 4. In cazul in care sunt erori fizice pe caseta, acestea pot fi corectate manual cu un editor wav (eu n-am reusit sa fac acest lucru pana acum). Restaurare date stricate: ========================== Datele se pot exporta din Tapir, ca dump. Fisierul exportat nu are primul octet (care nu stiu ce reprezinta, dar a fost FF mereu unde am incercat), si nici ultimul octet (checksum). Dupa corectarea fisierului, acestuia trebuie sa i se adauge primul si ultimul octet. Ultimul octet se poate corecta ulterior tot cu Tapir, care ne arata checksum-ul corect. In felul acesta am restaurat screen-ul de la Mate4-4. Softuri necesare: ============= 1. Goldwave (pentru editarea wav-ului) 2. Maketzx (rulat fara parametri - pentru conversie din wav in tzx) 3. Tapir (pentru editare tzx, vizualizare screen-uri (base address 3F04) si introducere ton pur) Completare: =========== Calcul T-state count: ===================== In Audacity se selecteaza portiunea de ton pur. Din meniul Analyze -> Plot Spectrum - Algorythm: Spectrum - Size: 8192 (pare optim... daca nu se poate incerca 16384 dar e mai greu de vazut peak-ul) - Function: Bartlet window/Hamming window/Hann window (par să aiba acelasi peak) Valoarea pe care o căutăm este peak-ul (tonul sintetizat). 688Hz = 2664 T-state count 690Hz = 2656 T-state count 740Hz = 2476 T-state count Calcul numar de pulsuri: ======================== Manual: ======= - se afla durata dintre inceput si sfarsit: 49.513s -> 51.700s = 2.187s - se numară un set de pulsuri cu o durata partiala cat de cat potrivita: 49.513s -> 49.594s = 0.081s : 55 pulsuri - se imparte durata totală la durata partiala: 2.187s / 0.081s = 27 - se inmulteste rezultatul anterior cu numarul de pulsuri al duratei partiale pentru a afla numarul total de pulsuri: 27 * 55 pulsuri = 1485 pulsuri Automat: ======== In Audacity se selecteaza portiunea de ton pur. Din meniul Tools -> Nyquist Prompt se introduce codul de mai jos: `` (setf offset 0.1) ; looks for the signal crossing this amplitude value (setf step 1) ;follow waveform in steps of this number of samples (let* ((sig (snd-avg *track* step step op-average)) (ln (truncate len)) (data (snd-fetch-array sig ln ln)) (labels ()) (oldval -1)) (do* ((val (aref data 0)(aref data count)) (count 0 (1+ count))) ((= count ln) labels) (when (and (> oldval offset)(<= val offset)) (push (list (/ (- count 1) (/ *sound-srate* step)) “”) labels)) (setf oldval val)) (setf lnth (length labels))) `` Rezultatul va fi numărul de pulsuri